import axios, {
  AxiosError,
  InternalAxiosRequestConfig,
  AxiosResponse,
} from "axios";
import { ResultTypeEnum } from "./enum";

import { ElMessage } from "element-plus";

const config = {
  // 默认地址请求地址，可在 .env.** 文件中修改
  baseURL: "/user",
  // 设置超时时间
  timeout: ResultTypeEnum.TIMEOUT as number,
  // 跨域时候允许携带凭证
  withCredentials: true,
};

export const ownHttp = axios.create(config);

/**
 * @use 请求拦截器
 * 客户端发送请求 -> [请求拦截器] -> 服务器
 * token校验(JWT) : 接受服务器返回的 token,存储到 vuex/pinia/本地储存当中
 */
ownHttp.interceptors.request.use(
  (config: InternalAxiosRequestConfig) => {
    console.log("请求拦截", config);

    return config;
  },
  (error: AxiosError) => {
    return Promise.reject(error);
  }
);

/**
 * @use 响应拦截器
 *  服务器换返回信息 -> [拦截统一处理] -> 客户端JS获取到信息
 */
ownHttp.interceptors.response.use(
  (response: AxiosResponse) => {
    const { data } = response;
    // 请求失败
    if (data.code == ResultTypeEnum.ERROR) {
      console.log("请求失败", data.code);
      // userStore.setToken("");
      // router.replace(LOGIN_URL);
      ElMessage.error(data.msg);
      return Promise.reject(`${data.msg}`);
    }
    // if (data.token) {
    //   localStorage.setItem("token", data.data.token);
    // }
    console.log("响应拦截", data);
    return data;
  },
  (error: AxiosError) => {
    return Promise.reject(error);
  }
);
